# 闭包的语法
# 闭包的作用: 闭包可以缓存 外部函数变量的值 (eg:外部函数func_out中的num1)
# num1是func_out函数的一个形参. 形参也是func_out中的一个变量参数

# 闭包定义: 内部函数使用了外部函数的变量;这个内部函数就是闭包

# 闭包成立的三个条件
# 1 有嵌套 (定义一个外部函数 一个内部函数)
# 2 有引用 (内部函数中, 使用外部函数 中的变量)
# 3 有返回 (返回内部函数的入口地址)

# 1 有嵌套 (定义一个外部函数 一个内部函数)
def func_out(num1):
    def func_in(num2):
        # 2 由引用 (内部函数中, 使用外部函数 中的变量)
        sum = num1 + num2
        print('sum-->', sum)
        return sum

    # 3 有返回 (返回内部函数的入口地址)
    return func_in


# 第1次调用 : 调用外部函数, 结果是返回内部函数的入口地址
myf = func_out(10)

# 第2次调用 有了[内部函数的入口地址], 就可以执行内部函数
result = myf(1)
print('result-->', result)
